package com.parking.status.sync.netty.server;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;

import java.nio.ByteOrder;

/**
 * Created by Administrator on 2015/9/18.
 */
public class RequestHeadDecoder extends LengthFieldBasedFrameDecoder {

    // 第一个参数为字节序
    // 第二个参数为信息最大长度，超过这个长度回报异常，
    // 第三参数为长度属性的起始（偏移）位，我们的协议中长度是0到第4个字节，所以这里写0，
    // 第四个参数为“长度属性”的长度，我们是4个字节，所以写4，
    // 第五个参数为长度调节值，在总长被定义为包含包头长度时，修正信息长度，
    // 第六个参数为跳过的字节数，根据需要我们跳过前5个字节，以便接收端直接接受到不含“长度属性”的内容。
    public RequestHeadDecoder(
            ByteOrder order, int maxFrameLength, int lengthFieldOffset,
            int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip) {
        super(order, maxFrameLength, lengthFieldOffset, lengthFieldLength,
                lengthAdjustment, initialBytesToStrip, true);
    }

    public RequestHeadDecoder() {

        this(ByteOrder.LITTLE_ENDIAN, Integer.MAX_VALUE, 0, 4, 1, 5);
    }

    @Override
    protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {

        //默认就认为是不压缩的数据了
        return super.decode(ctx, in);
    }
}
